用 Apps Script 做一套掃碼打卡系統:簽到、算時數、出月報全自動

一群人一起做事,遲早會遇到同一個問題:每個人到底做了多少時數,怎麼記才不會又累又錯?
志工團體、社團、課程、小型單位都一樣。項目一多、人一多,光是每個月把時數結算清楚,就能花掉一個人一整個晚上。
這篇談的是一種做法:用 Google 的 Apps Script,做一套「掃碼打卡、時數自動算、月報自動出」的系統。
舊做法的麻煩:一疊簽到表,月底算到半夜
傳統做法是紙本簽到表。一個地點一張、一個月一疊。到了月底,得有人把每一張攤開來,一格一格看、一個人一個人加,才結算得出誰做了幾小時。
而且時數常常還有一堆規則要套:中午和晚餐時間要不要扣、湊不湊成半小時、遲到扣多少、有沒有排班。這些靠人腦一筆一筆算,慢、又容易錯,紙本也常常缺一張、少一頁。
| 舊做法 | 新做法 | |
|---|---|---|
| 簽到 | 紙本簽名 | 手機掃碼 |
| 算時數 | 月底人工加總 | 簽退當下自動算 |
| 出月報 | 一個人算到半夜 | 每月自動產生 |
| 套規則 | 靠人腦記 | 系統照設定算 |
核心:一個地點一張 QR,掃碼就打卡
做法很單純——每個地點貼一張專屬的 QR 圖,人到了用手機掃一下:
- 掃地點的 QR 圖(用 LINE 掃最保險,長輩也會)
- 第一次輸入名字,之後系統會記得
- 按「簽到」開始,做完按「簽退」
不用下載 App、不用註冊帳號。每一張 QR 對應一個地點,一掃系統就知道人在哪、在做什麼。
要多確認「是不是本人」,可以自己選
最單純的版本是掃碼後輸入名字、系統比對名冊——夠用、好上手,長輩不用學。如果你想更嚴謹,防代打、防冒名,身分這一層可以再往上加,常見兩條路:
- 用 Google 帳號認證:把 Web App 設成以登入者身分執行,程式就直接拿到對方的 Gmail,對照名冊裡的信箱欄。身分明確;代價是每個人要有 Google 帳號,而且在 LINE 內建瀏覽器裡登入 Google 常常會卡,比較適合本來就用 Google 生態的單位。
- 用 LINE 認證(LIFF):大家本來就用 LINE 掃碼,這條最順。頁面在 LINE 裡開的時候,用 LINE 的 LIFF 直接讀到對方的 LINE 帳號(一組固定的 userId),完全不用打字。第一次掃把 userId 綁到名字,之後一掃就自動認得人。前置要在 LINE Developers 開一個登入用的 channel,多一點設定,換來的是「掃了就知道是誰、又不用登入」。
三種還能混搭:對外開放的活動用輸入名字就好,需要嚴謹計時的核心業務再上 LINE 或 Google 認證。要多嚴、要多方便,是設計時自己決定的,不是系統綁死的。
時數不用人算,照你自己的規則算
打卡背後最有價值的一段,是時數自動計算,而且規則是你自己設的:
- 哪些時段不算(例如休息、用餐時間)
- 時數湊成整數還是半小時
- 遲到要不要扣、扣多少
- 排班制的工作,按班次算
這些只要設定一次,之後每個人一簽退,時數就照規則算好,不用任何人再動腦。
現場一定會出的狀況,先想好
實際跑起來,一定有人忘東忘西。這幾種常見狀況,系統都接得住:
- 有人忘了簽退——當天系統自動標記
- 特定身分(例如負責人)——時間到自動幫他簽退
- 跨天沒結的紀錄——下次掃碼自動補好,不會卡住隔天的打卡
真的要改,管理員直接在試算表裡改就好。
月報:其實你不用按什麼
可以設成每個月自動把上個月的時數整理成兩張表:每個人做了多少、每個項目或組別加起來多少。想臨時看,也是點兩下就出來。
以前要算一整晚的事,現在系統自己就做完了。
為什麼用 Apps Script
因為它把幾個大麻煩一次省掉:
- 不用養伺服器、不用月費——整套跑在免費的 Google 試算表上
- 資料就在一張 Google 表格裡——你看得懂、也改得動,要交接給下一個人也簡單
- 能連 Google 的其他服務——試算表、Gmail(自動寄通知)、雲端硬碟(存 QR 圖)都能串起來
而且你不用自己寫程式。用前幾篇介紹的 Codex + clasp,把需求講清楚,AI 就能幫你把整套打卡系統寫好、推上 Google 雲端。
說到底,它解決了什麼
一句話:把「靠紙筆和人力」的月結工作,換成「掃碼加自動整理」。
現場的人只要掏手機掃一下;管理的人拿到的,是一份隨時查得到、照規則算好、不會算錯也不會弄丟的時數紀錄。